<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //this的指向在函数定义的时候是确定不了的，
        //只有函数执行的时候才能确定，this最终指向调用它的对象。
        //一个含有this的函数不管被多少花里胡哨的对象调用，this也只是指向它上一级的对象

        var length = 10;
        function fn() {
            console.log(this.length);//在obj.method函数内打印时，是自调用 ，this指向windows，所以是全局变量
        }
        var obj = {
            length: 5,
            method: function () {
            fn();
            arguments[0]();
            //arguments[0]() == fn() == this指向arguments == argumrnts.length == 2
          }
        }
        obj.method(fn, 1);//10 2

        var b = 109
        function fn1() {
            console.log(this.b)
        }
        c = {
            b: 11,
            fn1: fn1.bind(window)
        }
        c.fn1() //109


        function foo() { 
            console.log(this.bar); 
        } 
        var bar = "bar1"; 
        var o2 = {bar: "bar2", foo: foo}; 
        var o3 = {bar: "bar3", foo: foo}; 

        foo();    //bar1        
        o2.foo(); //bar2         
        foo.call(o3);  //bar3
    </script>
    
</body>
</html>